package com.chapter14.lianxi;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class UmsPermission implements Serializable {
    private Long id;

    //@ApiModelProperty(value = "父级权限id")
    private Long pid;

    //@ApiModelProperty(value = "名称")
    private String name;

    //@ApiModelProperty(value = "权限值")
    private String value;

    //@ApiModelProperty(value = "图标")
    private String icon;

    //@ApiModelProperty(value = "权限类型：0->目录；1->菜单；2->按钮（接口绑定权限）")
    private Integer type;

    //@ApiModelProperty(value = "前端资源路径")
    private String uri;

    //@ApiModelProperty(value = "启用状态；0->禁用；1->启用")
    private Integer status;

    //@ApiModelProperty(value = "创建时间")
    private Date createTime;

    //@ApiModelProperty(value = "排序")
    private Integer sort;

    private static final long serialVersionUID = 1L;


    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getPid() {
        return pid;
    }

    public void setPid(Long pid) {
        this.pid = pid;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getValue() {
        return value;
    }

    public void setValue(String value) {
        this.value = value;
    }

    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }

    public Integer getType() {
        return type;
    }

    public void setType(Integer type) {
        this.type = type;
    }

    public String getUri() {
        return uri;
    }

    public void setUri(String uri) {
        this.uri = uri;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Integer getSort() {
        return sort;
    }

    public void setSort(Integer sort) {
        this.sort = sort;
    }

    public static void main(String[] args) {
        List<UmsPermission> permissionList = new ArrayList<>();
        //  filter :对Stream中的元素进行过滤操作，当设置条件返回true时返回相应元素。
        // 获取权限类型为目录的权限
        List<UmsPermission> dirList = permissionList.stream()
                .filter(permission -> permission.getType() == 0)
                .collect(Collectors.toList());


        //map:对Stream中的元素进行转换处理后获取。比如可以将UmsPermission对象转换成Long对象。
        // 我们经常会有这样的需求：需要把某些对象的id提取出来，然后根据这些id去查询其他对象，这时可以使用此方法。
        // 获取所有权限的id组成的集合
        List<Long> idList = permissionList.stream()
                .map(permission -> permission.getId())
                .collect(Collectors.toList());


        //用collect方法将List转成map:有时候我们需要反复对List中的对象根据id进行查询，
        // 我们可以先把该List转换为以id为key的map结构，然后再通过map.get(id)来获取对象，这样比较方便。
        // 将权限列表以id为key，以权限对象为值转换成map
        Map<Long, UmsPermission> permissionMap = permissionList.stream()
                .collect(Collectors.toMap(permission -> permission.getId(), permission -> permission));
    }
}